با استفاده از داده های زلزله ها در ایران و جهان به سوالات زیر پاسخ دهید.
library(readr)
library(dplyr)
library(ggplot2)
library(plotly)
library(highcharter)
library(raster)
library(sp)
library(RColorBrewer)
library(ggmap)
library(ggthemes)
historical_web_data = read_rds("D:/University/Semester8/Data analysis/week11/data/historical_web_data_26112015.rds")
disaster = read_delim("D:/University/Semester8/Data analysis/week11/data/disaster.txt", "\t", escape_double = FALSE, trim_ws = TRUE)
worldwide = read.csv("D:/University/Semester8/Data analysis/week11/data/worldwide.csv")
iran_earthquake = read_rds("D:/University/Semester8/Data analysis/week11/data/iran_earthquake.rds")۱. با استفاده از داده های historical_web_data_26112015.rds و استفاده از نمودار پراکنش سه بعدی بسته plotly نمودار طول، عرض و عمق زلزله ها را رسم نمایید. علاوه بر آن بزرگی هر نقطه را برابر بزرگی زمین لرزه قرار دهید.
plot_ly(historical_web_data , x = ~historical_web_data$Longitude , y = ~historical_web_data$Latitude , z = ~historical_web_data$Depth , size = ~historical_web_data$Magnitude)۲. پویانمایی سونامی های تاریخی را بر حسب شدت بر روی نقشه زمین رسم نمایید.(از داده زلزله های بزرگ استفاده نمایید.)
disaster %>% rename(lat = LATITUDE,lon = LONGITUDE, z = DEATHS,name = COUNTRY,sequence = YEAR) %>% dplyr::select(lat, lon, z, name, sequence) -> dis
hcmap() %>% hc_add_series(data = dis, type = "mapbubble",minSize = 0, maxSize = 30) %>% hc_plotOptions(series = list(showInLegend = FALSE))۳. نمودار چگالی دو بعدی زلزله های تاریخی ایران را رسم کنید.( از داده iran_earthquake.rds و لایه stat_density_2d استفاده نمایید).
iran_earthquake %>% filter(Mag > 5) -> iran_earthquake1
Iran <- map_data("world") %>% filter(region=="Iran")
iran_earthquake1 = iran_earthquake1 %>% filter(Mag > 5)
ggplot(iran_earthquake1 , aes(x = iran_earthquake1$Long , y = iran_earthquake1$Lat)) + geom_polygon(data = Iran , aes(x = Iran$long , y = Iran$lat)) + geom_point(color="red") + geom_density_2d() + xlab("Longitude") + ylab("Latitude")۴. احتمال اینکه در ایران در پنج سال آینده زلزله به بزرگی هفت ریشتر رخ دهد را محاسبه کنید. (از احتمال شرطی استفاده کنید.)
powerful_earthquake = disaster %>% filter(COUNTRY == "IRAN" ,EQ_PRIMARY > 7)
y = powerful_earthquake $ YEAR
y = y[-1]
y1 = c(y[-1] , 0)
y = (y1 - y)[-26]
print("Probability that we have an earthauake more than 7 rishter for next 5 years if there has not been any since last one(2017) is(we are in 2018):")## [1] "Probability that we have an earthauake more than 7 rishter for next 5 years if there has not been any since last one(2017) is(we are in 2018):"
print(sum(y<= 6)/length(y))## [1] 0.28
۵. بر اساس داده های زلزله های بزرگ ابتدا تعداد و متوسط کشته زلزله ها را بر حسب کشور استخراج نمایید. سپس نمودار گرمایی تعداد کشته ها را بر روی کره زمین رسم نمایید.(مانند مثال زیر!)
tlb = NULL
for(i in unique(disaster$COUNTRY)){
x = disaster %>% filter(COUNTRY == i)
d = sum(x$DEATHS , na.rm = T)
ave = mean(x$DEATHS , na.rm = T)
x = c(i , d , ave)
tlb = rbind(tlb , x)
}
colnames(tlb) = c("region" , "DEATH" , "DEATH_AVERAGE")
tlb = as.data.frame(tlb)
world <- map_data("world")
world = world %>% filter(region != "Antarctica")
world$region = world$region %>% toupper()
a = unique(world$region)
b = unique(tlb$region)
c = b %in% a
b = b[c]
tlb = tlb %>% filter(region %in% b)
e = world %>% filter(region %in% b)
e1 = merge(x = e , y = tlb , by = "region" , all = T)
rr = as.numeric(as.character(e1$DEATH))
rr = cut(rr, quantile(rr, seq(0, 1, len = 10)),include.lowest = TRUE)
e2 = e %>% mutate(DEATHS = rr)
ggplot(e2) + geom_polygon(aes(long, lat, group = group , fill = DEATHS)) + theme_map() ***
۶. با استفاده از داده لرزه های بزرگ و به وسیله طول، عرض، شدت، عمق مدلی برای پیش بینی تعداد کشته های زلزله بیابید.
fit = glm(data = disaster , DEATHS ~ LATITUDE + LONGITUDE + FOCAL_DEPTH + EQ_PRIMARY)۷. با استفاده از داده worldwide.csv به چند سوال زیر پاسخ دهید. تحقیق کنید آیا می توان از پیش لرزه، زلزله اصلی را پیش بینی کرد؟
۸. گزاره " آیا شدت زلزله به عمق آن بستگی دارد" را تحقیق کنید؟ (طبیعتا از آزمون فرض باید استفاده کنید.)
chisq.test(worldwide$mag , worldwide$depth)##
## Pearson's Chi-squared test
##
## data: worldwide$mag and worldwide$depth
## X-squared = 3403700, df = 4463700, p-value = 1
با توجه به p_value بالایی که به دست آوردیم این فرض که عمق زلزله از بزرگی مستقل است را رد نمی کنیم.
۹. میانگین سالانه زلزله ها را بر حسب کشور به دست آورید. آیا میتوان دلیلی در تایید یا رد تئوری هارپ ارائه کرد.
worldwide_by_year = split(worldwide, format(as.Date(worldwide$time), "%Y"))
loc = NULL
k = worldwide$place
k = as.character(k)
p = NULL
for(i in k){
x = strsplit(i , "[,]")
x = x[[1]][2]
p = c(p ,x)
}
p = substring(p , 2)
p1 = unique(p)
USA = p1[p1 %in% state.name]
USA = c(USA , "CA" , "U.S. Virgin Islands")
for(i in p1){
if(i %in% USA){
loc = c(loc , "USA")
}
else{
loc = c(loc , i)
}
}
loc = unique(loc)
tlb_year = as.data.frame(loc)
colnames(tlb_year) = "country"
for(j in worldwide_by_year){
p = NULL
k = j$place
k = as.character(k)
for(i in k){
x = strsplit(i , "[,]")
x = x[[1]][2]
p = c(p ,x)
}
p = substring(p , 2)
p1 = unique(p)
USA = p1[p1 %in% state.name]
USA = c(USA , "CA" , "U.S. Virgin Islands")
country = NULL
for(i in p){
if(i %in% USA){
country = c(country , "USA")
}
else{
country = c(country , i)
}
}
a = as.data.frame(table(country))
tlb_year = merge(x = tlb_year , y = a , by = "country" , all = T)
}
colnames(tlb_year) = c("Country" , "2015" , "2016" , "2017" , "2018")
tlb_year[is.na(tlb_year)] <- 0
tlb_year = tlb_year %>% mutate(mean_by_year = rowMeans(subset(tlb_year , select = c(`2015`, `2016`,`2017`,`2018`))))
print(tlb_year)## Country 2015 2016 2017 2018
## 1 Afghanistan 15 193 159 46
## 2 Albania 0 7 8 3
## 3 Algeria 0 15 7 4
## 4 American Samoa 0 1 1 1
## 5 Angola 0 1 0 0
## 6 Anguilla 0 15 11 1
## 7 Antarctica 0 5 5 2
## 8 Antigua and Barbuda 0 1 2 1
## 9 Argentina 18 234 261 61
## 10 Armenia 0 1 1 0
## 11 Australia 1 33 21 2
## 12 Austria 0 1 2 2
## 13 Azerbaijan 1 9 10 1
## 14 B.C. 10 87 64 22
## 15 Bangladesh 1 2 2 1
## 16 Barbados 1 1 4 0
## 17 Barbuda 0 6 10 1
## 18 Bhutan 0 1 2 0
## 19 Bolivia 2 45 43 22
## 20 Bonaire 0 3 3 2
## 21 Bosnia and Herzegovina 0 3 8 0
## 22 Botswana 0 0 12 0
## 23 Bouvet Island 1 5 3 1
## 24 Brazil 3 1 2 2
## 25 British Indian Ocean Territory 0 1 1 0
## 26 British Virgin Islands 32 674 423 100
## 27 Bulgaria 0 2 4 2
## 28 Burma 1 41 39 47
## 29 Canada 8 127 130 58
## 30 Cape Verde 0 0 1 0
## 31 Cayman Islands 1 0 3 1
## 32 Chile 103 776 764 160
## 33 China 12 204 165 53
## 34 Christmas Island 3 4 7 2
## 35 Colombia 3 106 82 28
## 36 Comoros 0 1 0 0
## 37 Costa Rica 2 33 32 19
## 38 Croatia 0 4 2 1
## 39 Cuba 0 13 8 1
## 40 Curaçao 0 0 1 0
## 41 Cyprus 2 12 7 0
## 42 Democratic Republic of the Congo 1 4 7 7
## 43 Djibouti 0 2 4 0
## 44 Dominica 0 6 1 0
## 45 Dominican Republic 24 202 252 194
## 46 East Timor 7 79 60 20
## 47 Ecuador 3 176 59 23
## 48 Ecuador region 0 4 1 0
## 49 Egypt 0 3 2 1
## 50 El Salvador 4 107 69 43
## 51 Equatorial Guinea 0 1 0 0
## 52 Eritrea 0 1 0 0
## 53 Ethiopia 0 1 1 1
## 54 Falkland Islands 0 1 2 0
## 55 Federated States of Micronesia 0 1 1 0
## 56 Fiji 40 630 621 151
## 57 Finland 0 0 1 0
## 58 France 1 15 8 6
## 59 French Guiana 0 0 2 0
## 60 French Polynesia 0 0 1 0
## 61 French Polynesia region 0 2 0 0
## 62 French Southern Territories 0 0 2 0
## 63 Germany 0 0 0 1
## 64 Greece 17 164 171 65
## 65 Greenland 1 8 10 11
## 66 Grenada 0 0 2 0
## 67 Guadeloupe 1 9 3 3
## 68 Guam 2 119 102 29
## 69 Guatemala 12 94 92 32
## 70 Guinea 0 0 0 1
## 71 Haiti 1 7 4 3
## 72 Honduras 1 17 7 22
## 73 Iceland 0 3 23 9
## 74 India 10 94 100 31
## 75 India region 0 0 2 1
## 76 Indonesia 244 1659 1523 464
## 77 Iran 6 110 204 87
## 78 Iraq 0 4 17 38
## 79 Italy 5 93 34 13
## 80 Jamaica 0 3 1 1
## 81 Japan 66 1165 805 239
## 82 Japan region 3 43 30 17
## 83 Kazakhstan 1 6 10 7
## 84 Kiribati region 0 1 0 1
## 85 Kosovo 0 0 0 1
## 86 Kyrgyzstan 3 83 27 8
## 87 Laikit II (Dimembe) 0 1 1 1
## 88 Laos 0 1 0 0
## 89 Lebanon 0 1 0 0
## 90 Lesotho 0 2 0 0
## 91 Libya 0 0 2 0
## 92 Macedonia 0 10 14 0
## 93 Madagascar 0 0 1 1
## 94 Malawi 0 2 3 6
## 95 Malaysia 0 1 1 2
## 96 Maldives 0 1 0 0
## 97 Malta 0 1 1 0
## 98 Martinique 1 8 3 1
## 99 Mauritania 1 1 0 0
## 100 Mauritius 0 6 6 1
## 101 Mexico 18 279 779 131
## 102 Micronesia 3 58 49 6
## 103 Mongolia 1 5 4 5
## 104 Montenegro 0 3 0 2
## 105 Montserrat 0 0 1 0
## 106 Morocco 0 48 2 0
## 107 Mozambique 0 3 3 1
## 108 Namibia 0 2 0 1
## 109 Nepal 2 25 9 0
## 110 New Caledonia 2 145 415 25
## 111 New Zealand 48 1076 443 120
## 112 Nicaragua 6 99 59 29
## 113 Niger 0 0 1 0
## 114 Niue 0 0 3 0
## 115 Norfolk Island 0 1 0 0
## 116 North Korea 0 2 6 0
## 117 Northern Mariana Islands 15 440 262 84
## 118 Northwest Territories 0 1 0 0
## 119 Norway 0 1 2 0
## 120 Nunavut 0 0 2 0
## 121 Nunoa 0 1 3 1
## 122 Oman 0 1 3 2
## 123 Pakistan 1 40 32 11
## 124 Palau 0 2 1 2
## 125 Panama 2 30 34 13
## 126 Papua New Guinea 60 946 607 529
## 127 Peru 27 281 231 65
## 128 Philippines 47 577 498 139
## 129 Poland 0 6 5 1
## 130 Portugal 0 20 15 7
## 131 Prince Edward Islands 0 6 0 1
## 132 Puerto Rico 104 1043 836 346
## 133 Reunion 0 0 0 1
## 134 Romania 2 5 12 4
## 135 Russia 25 365 482 124
## 136 Rwanda 0 3 0 0
## 137 Saint Barthélemy 0 1 1 2
## 138 Saint Helena 0 9 6 3
## 139 Saint Kitts and Nevis 0 1 3 2
## 140 Saint Lucia 0 0 1 0
## 141 Saint Martin 1 5 0 0
## 142 Saint Vincent and the Grenadines 0 0 1 0
## 143 Samoa 1 7 3 0
## 144 Saudi Arabia 0 8 3 1
## 145 Serbia 0 1 0 0
## 146 Solomon Islands 14 505 286 61
## 147 Somalia 0 10 7 3
## 148 South Africa 0 12 8 10
## 149 South Georgia and the South Sandwich Islands 14 331 174 41
## 150 South Korea 1 5 2 1
## 151 South Sandwich Islands 10 65 81 24
## 152 Spain 0 4 5 2
## 153 Sudan 0 0 1 0
## 154 Svalbard and Jan Mayen 1 17 17 4
## 155 Sweden 0 1 0 0
## 156 Switzerland 0 2 2 0
## 157 Syria 0 2 0 0
## 158 Taiwan 12 105 56 69
## 159 Tajikistan 41 146 111 49
## 160 Tanzania 0 8 10 4
## 161 Thailand 0 0 3 1
## 162 Tonga 36 442 432 108
## 163 Trinidad and Tobago 0 8 8 1
## 164 Tunisia 0 1 1 1
## 165 Turkey 6 42 89 16
## 166 Turkmenistan 2 5 19 1
## 167 Uganda 0 1 4 0
## 168 Ukraine 0 1 0 0
## 169 United Kingdom 0 0 2 2
## 170 USA 673 7825 7895 5775
## 171 Uzbekistan 1 10 5 3
## 172 Vanuatu 32 553 271 73
## 173 Venezuela 2 19 19 13
## 174 Vietnam 0 1 1 2
## 175 Wallis and Futuna 10 31 41 16
## 176 Yemen 0 19 17 3
## 177 Zambia 0 2 7 1
## 178 Zimbabwe 0 4 2 1
## 179 <NA> 0 0 0 0
## mean_by_year
## 1 103.25
## 2 4.50
## 3 6.50
## 4 0.75
## 5 0.25
## 6 6.75
## 7 3.00
## 8 1.00
## 9 143.50
## 10 0.50
## 11 14.25
## 12 1.25
## 13 5.25
## 14 45.75
## 15 1.50
## 16 1.50
## 17 4.25
## 18 0.75
## 19 28.00
## 20 2.00
## 21 2.75
## 22 3.00
## 23 2.50
## 24 2.00
## 25 0.50
## 26 307.25
## 27 2.00
## 28 32.00
## 29 80.75
## 30 0.25
## 31 1.25
## 32 450.75
## 33 108.50
## 34 4.00
## 35 54.75
## 36 0.25
## 37 21.50
## 38 1.75
## 39 5.50
## 40 0.25
## 41 5.25
## 42 4.75
## 43 1.50
## 44 1.75
## 45 168.00
## 46 41.50
## 47 65.25
## 48 1.25
## 49 1.50
## 50 55.75
## 51 0.25
## 52 0.25
## 53 0.75
## 54 0.75
## 55 0.50
## 56 360.50
## 57 0.25
## 58 7.50
## 59 0.50
## 60 0.25
## 61 0.50
## 62 0.50
## 63 0.25
## 64 104.25
## 65 7.50
## 66 0.50
## 67 4.00
## 68 63.00
## 69 57.50
## 70 0.25
## 71 3.75
## 72 11.75
## 73 8.75
## 74 58.75
## 75 0.75
## 76 972.50
## 77 101.75
## 78 14.75
## 79 36.25
## 80 1.25
## 81 568.75
## 82 23.25
## 83 6.00
## 84 0.50
## 85 0.25
## 86 30.25
## 87 0.75
## 88 0.25
## 89 0.25
## 90 0.50
## 91 0.50
## 92 6.00
## 93 0.50
## 94 2.75
## 95 1.00
## 96 0.25
## 97 0.50
## 98 3.25
## 99 0.50
## 100 3.25
## 101 301.75
## 102 29.00
## 103 3.75
## 104 1.25
## 105 0.25
## 106 12.50
## 107 1.75
## 108 0.75
## 109 9.00
## 110 146.75
## 111 421.75
## 112 48.25
## 113 0.25
## 114 0.75
## 115 0.25
## 116 2.00
## 117 200.25
## 118 0.25
## 119 0.75
## 120 0.50
## 121 1.25
## 122 1.50
## 123 21.00
## 124 1.25
## 125 19.75
## 126 535.50
## 127 151.00
## 128 315.25
## 129 3.00
## 130 10.50
## 131 1.75
## 132 582.25
## 133 0.25
## 134 5.75
## 135 249.00
## 136 0.75
## 137 1.00
## 138 4.50
## 139 1.50
## 140 0.25
## 141 1.50
## 142 0.25
## 143 2.75
## 144 3.00
## 145 0.25
## 146 216.50
## 147 5.00
## 148 7.50
## 149 140.00
## 150 2.25
## 151 45.00
## 152 2.75
## 153 0.25
## 154 9.75
## 155 0.25
## 156 1.00
## 157 0.50
## 158 60.50
## 159 86.75
## 160 5.50
## 161 1.00
## 162 254.50
## 163 4.25
## 164 0.75
## 165 38.25
## 166 6.75
## 167 1.25
## 168 0.25
## 169 1.00
## 170 5542.00
## 171 4.75
## 172 232.25
## 173 13.25
## 174 1.00
## 175 24.50
## 176 9.75
## 177 2.50
## 178 1.75
## 179 0.00
۱۰. سه حقیقت جالب در مورد زلزله بیابید.
تعداد کشته های زلزله های بالای 7 ریشتر را برای سال های یعد از 1975 کشیدیم که سیر نزولی داشت. می توان گفت با پیشرفت تکنولوژی تعداد کشته های زازله ها کم شده است.
deaths_per_year = NULL
y = unique(disaster$YEAR)
disaster1 = disaster %>% filter(EQ_PRIMARY > 7)
for(i in y){
x = disaster1 %>% filter(YEAR == i)
x = sum(x$DEATHS , na.rm = T)
deaths_per_year = c(deaths_per_year , x)
}
k = (deaths_per_year != 0)
deaths_per_year = deaths_per_year[k]
y = y[k]
k = y>1975
y = y[k]
deaths_per_year = deaths_per_year[k]
tlb_death_per_year = data.frame(y , deaths_per_year)
colnames(tlb_death_per_year) = c("year" , "deaths")
ggplot(tlb_death_per_year , aes(y , deaths_per_year)) + geom_col() + geom_smooth(method = "lm", se = T)توزیع ریشتر زلزله ها را از داده disaster کشیدیم که به یک توزیع نرمال با میانگین 6.47 رسیدیم.
y = disaster$EQ_PRIMARY
y <- y[!is.na(y)]
m = mean(y)
y = as.data.frame(table(y))
colnames(y) = c("Year" , "Freq")
ggplot(y , aes(Year , Freq)) + geom_col() + coord_flip()نمودار 30 کشوری که بیشترین تعداد زلزله هر را دارا بودند بر حسب تعداد زلزله ها کشیدیم. مشاهده می شود تعداد زلزله های این 30 کشور حدود 0.8 کل زلزله ها را شامل می شود و کشور چین به تنهایی 0.1 تعداد کل زلزله ها را دارا است.
y = disaster$COUNTRY
y <- y[!is.na(y)]
m = mean(y)
y = as.data.frame(table(y))
y <- y[order(-y$Freq),]
ratio = sum(y$Freq[1:30]) / sum(y$Freq)
print(paste("30 maximim earthquakes number to sum of earthquakes : " , ratio , sep = ""))## [1] "30 maximim earthquakes number to sum of earthquakes : 0.806173249253236"
ratio_china = y$Freq[1] / sum(y$Freq)
print(paste("China earthquakes number to sum of earthquakes : " , ratio_china , sep = ""))## [1] "China earthquakes number to sum of earthquakes : 0.0970793229339529"
y = y[1:30,]
colnames(y) = c("Year" , "Freq")
print(ggplot(y , aes(reorder(Year,-Freq) , Freq)) + geom_col() + coord_flip())